Capítulo 18 - Ingeniería de Software Distribuido
". . .una colección de computadoras independientes que aparecen al usuario como un solo sistema coherente."
Para sistemas organizacionales a gran escala, estas ventajas representan que los sistemas distribuidos han sustituido, en especial, a los sistemas heredados mainframe desarrollados en la década de 1990.
Los sistemas distribuidos son inherentemente más complejos que los sistemas centralizados. Esto los hace más difíciles de diseñar, implementar y poner a prueba.
La complejidad surge porque las diferentes partes del sistema se manejan de manera independiente como lo hace la red.
No hay una sola autoridad a cargo del sistema, por lo que el control descendente es imposible.
Transparencia
¿En qué medida debería aparecer el sistema distribuido al usuario como un sistema único?
Apertura
¿Debe diseñarse un sistema utilizando protocolos estándar que respalden la interoperabilidad?
Escalabilidad
¿Cómo se puede construir el sistema para que sea escalable?
Seguridad
¿Cómo se pueden definir e implementar políticas de seguridad utilizables?
Calidad del servicio
¿Cómo se especifica la calidad del servicio?
Gestión de fallas
¿Cómo se pueden detectar, contener y reparar las fallas del sistema?
Existen dos tipos fundamentales de interacción que pueden tener lugar entre las computadoras en un sistema de cómputo distribuido: interacción procedimental e interacción basada en mensajes.
Una computadora llama a un servicio conocido ofrecido por otra computadora y espera una respuesta.
Implementación RPC (remote procedure calls), solicitudes como si el otro fuera un componente local (solución middleware). En Java, RMI (remote method invocations).
La computadora que envía envía información sobre lo que se requiere a otra computadora. No hay necesidad de esperar una respuesta.
Se crean mensajes que se mandan a traves del middleware. En este enfoque no es necesario conocer al otro.
Los componentes en un sistema distribuido pueden implementarse en diferentes lenguajes de programación y pueden ejecutarse en tipos de procesador completamente diferentes. Los modelos de datos, la representación de información y los protocolos de comunicación pueden ser diferentes.
Middleware es un software que puede administrar estas diversas partes y garantizar que puedan comunicarse e intercambiar datos.
En un sistema distribuido, el middleware por lo general brinda dos distintos tipos de soporte:
Soporte de interacción: coordina las interacciones entre los diferentes componentes en el sistema.
Provisión de servicios comunes: proporciona implementaciones reutilizables de servicios que pueden ser requeridas por varios componentes en el sistema distribuido.
Los sistemas distribuidos a los que se accede a través de Internet normalmente están organizados como sistemas cliente-servidor.
La computadora remota proporciona servicios, como el acceso a páginas web, que están disponibles para clientes externos.
Los sistemas cliente-servidor dependen de que exista una separación clara entre la presentación de información y los cálculos que crea y procesa esa información. En consecuencia, se debe diseñar la arquitectura de los sistemas distribuidos cliente-servidor para que se estructuren en varias capas lógicas, con interfaces claras entre dichas capas. Esto permite que cada capa se distribuya en diferentes computadoras.
La figura ilustra este modelo y muestra una aplicación estructurada en cuatro capas:
Como se explicó en la introducción de este capítulo, los diseñadores de sistemas distribuidos deben organizar sus diseños de sistema para encontrar un equilibrio entre rendimiento, confiabilidad, seguridad y manejabilidad del sistema. No hay un modelo universal de organización de sistemas adecuado a todas las circunstancias, así que han surgido varios estilos arquitectónicos distribuidos. Cuando diseñe una aplicación distribuida, deberá elegir un estilo arquitectónico que soporte los requerimientos no funcionales críticos de su sistema.
Se usan comúnmente en sistemas en tiempo real.
El proceso 'maestro' generalmente es responsable del cálculo, la coordinación y las comunicaciones, y controla los procesos 'esclavos'.
Los procesos 'esclavos' están dedicados a acciones específicas, como la adquisición de datos de una matriz de sensores.
El modelo de la figura es un modelo de un sistema de control de tráfico en una ciudad y tiene tres procesos lógicos que se ejecutan en procesadores independientes. El proceso maestro es el proceso de sala de control, que se comunica con procesos esclavo independientes que son responsables de recolectar datos de tráfico y administrar la operación de los semáforos.
Este modelo maestro-esclavo de sistema distribuido se usa en situaciones en que es posible predecir el procesamiento distribuido que se requiere, y en que el procesamiento puede asignarse fácilmente a procesadores esclavos.
Una arquitectura cliente-servidor de dos niveles es la forma más simple de arquitectura cliente-servidor. El sistema se implementa como un solo servidor lógico más un número indefinido de clientes que usan dicho servidor.
Esto se ejemplifica en la figura, que indica dos formas de este modelo arquitectónico:
Las fronteras son borrosas, javascript ha permitido clientes más pesados sin gestión adicional, hay pocos clientes ligeros actualmente.
Un ejemplo de una situación en la que se usa una arquitectura de cliente pesado es un sistema de cajero automático, que entrega efectivo y otros servicios bancarios a los usuarios. El cajero es la computadora cliente y el servidor es, por lo general, un mainframe que opera la base de datos de cuentas de los clientes. Una computadora mainframe es una máquina poderosamente diseñada para procesamiento de transacciones. Por consiguiente, es capaz de manejar el gran volumen de las transacciones generadas por los cajeros automáticos, otros sistemas de cajeros y banca en línea. El software en el cajero realiza mucho procesamiento relacionado con el cliente asociado con una transacción.
Las diferentes capas del sistema, a saber, presentación, administración de datos, procesamiento de aplicaciones y base de datos, son procesos separados que pueden ejecutarse en diferentes procesadores.
Son más escalables.
Se usan cuando hay varias bases de datos (se agrega servidor de integración).
El procesamiento puede distribuirse entre la lógica de la aplicación y los servidores de gestión de datos → respuesta más rápida.
Un sistema de banca por Internet es un ejemplo de una arquitectura cliente-servidor multinivel, donde existen tres niveles en el sistema. La base de datos de clientes del banco (por lo general ubicada en una computadora mainframe, como se expuso anteriormente) brinda servicios de base de datos. Un servidor Web ofrece servicios de gestión de datos, tales como generación de páginas Web y algunos servicios de aplicación. Los servicios de aplicación, tales como las instalaciones para transferir efectivo, generar estados de cuenta, pagar facturas y así sucesivamente, se implementan en el servidor Web y como scripts que se ejecutan por el cliente. La propia computadora del cliente con un navegador es el cliente. Este sistema es escalable porque es relativamente sencillo agregar servicios (ampliar) conforme aumenta el número de clientes.
No hay distinción entre clientes y servidores.
Cada entidad distribuible es un componente que proporciona servicios a otros componentes y recibe servicios de otros componentes.
La comunicación de componentes se realiza a través de un sistema de middleware.
Beneficios:
Los sistemas de minería de datos son un buen ejemplo de un tipo de sistema en el que una arquitectura de componentes distribuidos es el mejor patrón arquitectónico a usar. Un sistema de minería de datos busca relaciones entre los datos que se almacenan en algunas bases de datos. Los sistemas de minería de datos por lo general obtienen información de varias bases de datos separadas, realizan procesamiento intensivo de cómputo y despliegan sus resultados en forma gráfica.
Desventajas:
Arquitectura semicentralizada:
El software como servicio (SaaS) implica alojar el software de forma remota y proporcionar acceso a él a través de Internet.
Se implementa en un servidor (o más comúnmente en varios servidores) y se accede a él a través de un navegador web. No se implementa en una PC local.
El software es propiedad y está administrado por un proveedor de software, en lugar de las organizaciones que usan el software.
Los usuarios pueden pagar por el software de acuerdo con la cantidad de uso que hacen de él o mediante una suscripción anual o mensual.